#include <iostream>
#include <unistd.h>
#include <fcntl.h>
#include <cstdio>

//将文件描述符设置为非阻塞
void setNonBlock(int fd)
{
    int fl=fcntl(fd,F_GETFL);
    if(fl<0)
    {
        perror("fcntl erro");
        return;
    }
    fcntl(fd,F_SETFL,fl|O_NONBLOCK);
}


int main()
{
    setNonBlock(0);

    char buffer[1024];
    while(true)
    {
        int n=read(0,buffer,sizeof(buffer)-1);
        //读取成功
        if(n>0)
        {
            buffer[n-1]=0;
            std::cout<<buffer<<std::endl;
        }
        else if(n<0)
        {
            //1,读取出错 2，底层没有数据准备好
            if(errno==EAGAIN||errno==EWOULDBLOCK)
            {
                std::cout<<"数据还没有准备好..."<<std::endl;
                sleep(1);
                //做其他事情
            }
            else if(errno==EINTR)
            {
                //读取时被信号中断
                continue;
            }
            else
            {
                //真正的读取出错了
                break;
            }
        }
        else
        {
            break;
        }
    }
    return 0;
}